package br.com.roteador.component;


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;

public class StringUteis {

	/**
	 * Esta fun��o deixa a string apenas com n�meros!!!
	 * @author marcus.antonio
	 * @param string String
	 * @return stringLimpa String
	 * */
	public static String limpaString(String string) {
		
		String stringLimpa = "";
		if (!isEmpty(string)) {
			java.util.regex.Pattern m = java.util.regex.Pattern.compile("[A-z.:</?-]");
			Matcher m1 =  m.matcher(string);
			stringLimpa = m1.replaceAll("");
			stringLimpa = stringLimpa.replace("�", "");
			stringLimpa = stringLimpa.replace("+", "").trim();
			
			try {
				char first = stringLimpa.charAt(0);
				if((int)first == 160) {
					stringLimpa = stringLimpa.substring(1, stringLimpa.length());
				}
			} catch (StringIndexOutOfBoundsException e) {
			}
		}
		
		return stringLimpa;
	}
	
	/**
	 * Esta fun��o deixa a string apenas com n�meros!!!
	 * @author marcus.antonio
	 * @param string String
	 * @return stringLimpa String
	 * */
	public static String limpaStringTelefone(String string) {
		
		String stringLimpa = "";
		if (!isEmpty(string)) {
			java.util.regex.Pattern m = java.util.regex.Pattern.compile("[A-z. \"}{</-]");
			Matcher m1 =  m.matcher(string);
			stringLimpa = m1.replaceAll("");
			stringLimpa = stringLimpa.replace("+", "");
		}
		
		return stringLimpa;
	}
	
	/** [Marcus] Esta fun��o remove todos os n�meros e a pontua��o de uma string
	 * usando express�o regular.
	 * */
	public static String removeNumeroPontuacao(String string) {
		
		String stringLimpa = "";
		if (!"".equals(string) && string != null) {
			java.util.regex.Pattern m = java.util.regex.Pattern.compile("[0-9\t.,:]");
			Matcher m1 =  m.matcher(string);
			stringLimpa = m1.replaceAll("");
		}
		
		return stringLimpa;
	}
	
	
	 /** [Marcus] Verifica se a string est� vazia ou se � nula. Retorna true
	   * se ela TIVER algo, se for nula ou estiver vazia retorna FALSE.
	   * @author marcus.antonio
	   * @param String string - String a ser verificada.
	   * */
	  public static boolean isEmpty (String string){
		  if("".equals(string) || string == null || string.isEmpty()){
			  return true;
		  }else{
			  return false;
		  }
	  }
	  
	  public static boolean isNumber (String str) {
		  try {
				Integer.parseInt(str);
				return true;
			} catch (NumberFormatException e) {
				return false;
			}
	  }
	  
	public static int converteStrInt (String str) {
		int retorno = 0;
		if (!isEmpty(str)) {
			str = str.trim();
			str = limpaString(str);
			try {
				retorno = Integer.parseInt(str);
			} catch (NumberFormatException e) {
				/* TODO [Marcus] Remover para produ��o
				 * */
				e.printStackTrace();
				System.out.println(str);
			}
		}
		return retorno;
	}
	
	public static Date convertStrUtilDate (String str) {
		if (!isEmpty(str)) {
		    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
		    try {
				Date dataConvertida = dateFormat.parse(str);
				return dataConvertida;
			} catch (ParseException e) { }
	    }
		
		return null;
	}
	
	public static double convertStrDouble (String str) {
		double retorno = 0;
		try {
			retorno = Double.parseDouble(str);
		} catch (NumberFormatException e) {
		} catch (NullPointerException e) {
		}
		
		return retorno;
	}
	
	public static String trataStringPreco (String preco) {
		if (!StringUteis.isEmpty(preco)) {
			preco = StringUteis.limpaString(preco);
			preco = preco.replace("R$", "");
			preco = preco.replace("$", "");
			if (preco.contains(".")) {
				if (preco.contains(",")) {
					preco = preco.replace(".", "");
					preco = preco.replace(",", ".");
				} else {
					String[] campos = preco.split("\\.");
					if (campos[1].length() > 2) {
						preco = preco.replace(".", "");
						preco = preco + ".00";
					}
				}
			} else {
				if (preco.contains(",")) {
					preco = preco.replace(",", ".");
				} else {
					preco = preco + ".00";
				}
			}
			preco = preco.trim();
		}
		
		return preco;
	}
}
